位运算

#include<stdio.h>
int ones(unsigned int n)
{
	int m=n==0?0:1;
	while(n=(n&(n-1))) // 将整数n的二进制表示中最右侧的一个1置0
		m++;
	return m;
}
int isBit1(int num, unsigned int indexBit) // 判断从右数起的indexBit位是不是1
{
	return (num&(1u<<indexBit))!=0;
	//num=num>>indexBit;
	//return num&1; // &1避免1做为符号
}
int main()
{
    int a=1;
	int b=32;
	printf("%d\n",a<<b);  // a<<(b%32)   1
	printf("%d\n",1<<32); // 0
	int i=-1;
	printf("%d\n",i>>2);  // -1 = 0xFFFFFFFF,移位后要按符号位补位,还是0xFFFFFFFF
	printf("%d\n",ones(-1));
	printf("%d\n",isBit1(-1,3));
    getchar();
    return 0;
}

本页共32段,616个字符,750 Byte(字节)